home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
scope
/
076-100
/
scopedisk77
/
btutor
/
basictutorial
< prev
next >
Wrap
Text File
|
1995-03-19
|
11KB
|
352 lines
AmigaBASIC Tutorial #1
Written by
Pierre Fortin
--------------------------------------------------------------------------
INTRODUCTION:
The following tutorial is for the use of AmigaBASIC programmers both
novice and intermidiate programmers can benfit from this tutorial.
Part 1 (this tutorial) contains information which is quite useful so if
possible, read this file with a program that can let you print your current
screen so that you can create yourself a quick refrence card. The following
tutorial will cover the following:
How to access libraries in AmigaBASIC
How to use CLI commands
How to interface I/O with your modem
and How to create a console window in AmigaBASIC.
--------------------------------------------------------------------------
Accessing libraries in AmigaBASIC
--------------------------------------------------------------------------
AmigaBASIC has a very extensive command set of 198 commands. More than
enough to accomplish many tasks. Though limitiations do arrise. For
example, what if you wanted to read the current color pallete values? There
is no specific command to do so! What does one do when faced with such a
problem? One uses specific commands within those 198 commands in the
AmigaBASIC set to call up ROM Kernal routines. I won't go much further
into the subject of libraries for it is all documented with the AmigaBASIC
manual included with your Amiga. I mentioned libraries for many of the
routines and tips in this file and hopefully others include access to
libraries. This is why you MUST have the following libraries in your
current directory from when you boot up AmigaBASIC or in the LIBS:
directory of your system disk.
dos.bmap
intuition.bmap
exec.bmap
--------------------------------------------------------------------------
How to use CLI commands in AmigaBASIC
--------------------------------------------------------------------------
The following part of this text file includes code to call CLI
commands from AmigaBASIC. CLI is a medium used by a large majority of
Amiga users. This enviroment is controlled by small programs called
commands. These commands do many tasks such as list the content of the
disk, give you information about the disk, delete files, copy files,
and much, much more... To access these programs (refered as commands
from here on) would greatly increase the power and complexity of your
AmigaBASIC program(s). The following list can be typed into the
AmigaBASIC editor and saved as ASCII. (Saving in ASCII is explained at
the end of this document.) These files can then be merged to your program
and by CALLing this subroutine, you will be able to execute CLI commands
from AmigaBASIC.
Place the following at the beginning of your program:
DECLARE FUNCTION xOpen& LIBRARY
DECLARE FUNCTION Execute% LIBRARY
LIBRARY "dos.library"
This is the subroutine:
SUB CLI (Command$) STATIC
SHARED error.code%
work$=Command$+CHR$(0)
count%=0
out.filename$="RAM:CLI.OUT"
out$=out.filename$+CHR$(0)
out.handle&=xOpen&(SADD(out$),1006)
IF out.handle&=0 THEN
error.code%=1
EXIT SUB
END IF
follow%=Execute%(SADD(work$),0,out.handle&)
IF follow%=false THEN
error.code%=2
EXIT SUB
END IF
CALL xClose(out.handle&)
text.height%=PEEKW(WINDOW(8)+58)
window.height%=PEEKW(WINDOW(7)+10)-11
lines%=INT(window.height%/text.height%)-3
OPEN out.filename$ FOR INPUT AS 1
WHILE (EOF(1)=0)
INPUT #1,reader$
count%=count%+1
IF count%>lines% THEN
count%=0
PRINT "<< Press any key to continue >>";
WHILE INKEY$="":WEND
PRINT
END IF
WEND
PRINT "## End output ##"
CLOSE 1
KILL out.filename$
END SUB
The following syntax should be used to call this routine.
CLI "{COMMAND}"
Ex. CLI "dir df1:"
The previous example would read the directory of DF1: and output it to
a file in RAM: called CLI.OUT. This file would then be displayed and the
subroutine would return to where you called from within your program.
--------------------------------------------------------------------------
How to interface I/O with your modem
--------------------------------------------------------------------------
Accessing your modem from AmigaBASIC is very simple. There is
no LIBRARY call's to use your modem from AmigaBASIC, the routine uses
internal commands. You simply open the communication port at the baud
rate of your choice (also depends on the highest speed of your modem.)
OPEN "COM1:{Baud Rate},{Parity},{Data Bits},{Stop Bits} AS #1
Just replace the name in brackets with the appropriate values. These
values are explained in your AmigaBASIC manual.
You must then place yourself in a wait state and wait for input
from the modem. This is achieved with the help of the LOC command.
WHILE LOC(1)=0:WEND
{Rest of routine goes here}
This particular syntax wait's until a character is pending from the modem
and then goes on to continue where you place your routine. (Porperly
marked in the above example.) These are a few other commands you can
use with the modem.
modeminput$=INPUT$({Number of Characters},1) 'Modem input
INPUT$ #1,modeminput$
PRINT #1,"This is going to the modem!!"
* NOTE: The number 1 [ONE] in the above examples is the file number and
may be changed at will!
--------------------------------------------------------------------------
How to create a console window in AmigaBASIC
--------------------------------------------------------------------------
The proper title to this final section in this tutorial would be a
faster print command. The routine is fairly complex so I will
display it and then comment on it.
Place these at the beginning of your program:
DECLARE FUNCTION OpenDevice% LIBRARY
DECLARE FUNCTION AllocMem& LIBRARY
DECLARE FUNCTION AllocSignal% LIBRARY
DECLARE FUNCTION FindTask& LIBRARY
DECLARE FUNCTION DoIO& LIBRARY
LIBRARY "exec.library"
C1$=CHR$(155) ' Control Sequence Introducer
C2$=CHR$(8) ' Backspace
C3$=CHR$(10) ' Line Feed
C4$=CHR$(11) ' VTab
C5$=CHR$(12) ' Form Feed
C6$=CHR$(13) ' CR
C7$=CHR$(14) ' SHIFT IN
C8$-CHR$(15) ' SHIFT OUT
C9$=CHR$(155)+"1E" 'RETURN
The subroutines:
SUB ConPrint(text$) STATIC
SHARED c.io&
IF c.io&=0 THEN :SystemOn
POKEL c.io&+36,LEN(text$)
POKEL c.io&+40,SADD(text$)
e&=DoIO&(c.io&)
END SUB
SUB SystemOff STATIC
SHARED c.io&
CloseConsole c.io&
END SUB
SUB SystemOn STATIC
SHARED c.io&,c.c$
OpenConsole c.io&
POKEW c.io&+28,3
END SUB
SUB OpenConsole(result&) STATIC
CreatePort "basic.con",0,c.port&
IF c.port&=0 THEN ERROR 255
CreateStdIO c.port&,c.io&
POKEL c.io&+36,124
POKEL c.io&+40,WINDOW(7)
dev$="console.device"+CHR$(0)
c.error%=OpenDevice%(SADD(dev$),0,c.io&,0)
IF c.error%<>0 THEN ERROR 255
result&=c.io&
END SUB
SUB CloseConsole(io&) STATIC
port&=PEEKL(io&+14)
CALL CloseDevice(io&)
RemovePort port&
RemoveStdIO io&
END SUB
SUB CreateStdIO (port&,result&) STATIC
opt&=2^16
result&=AllocMem&(48,opt&)
IF result&=0 THEN ERROR 7
POKE result&+8,5
POKEL result&+14,port&
POKEW result&+18,50
END SUB
SUB RemoveStdIO (io&) STATIC
IF io&<>0 THEN
CALL FreeMem(io&,48)
END IF
END SUB
SUB CreatePort (port$,pri%,result&) STATIC
opt&=2^16
byte&=38+LEN(port$)
port&=AllocMem&(byte&,opt&)
IF port&=0 THEN ERROR 7
POKEW port&,byte&
port&=port&+2
sigBit%=AllocSignal%(-1)
IF sigBit%=-1 THEN
CALL FreeMem(port&,byte&)
ERROR 7
END IF
sigTask&=FindTask&(0)
POKE port&+8,4
POKE port&+9,pri%
POKEL port&+10,port&+34
POKE port&+15,sigBit%
POKEL port&+16,sigTask&
POKEL port&+20,port&+24
POKEL port&+28,port&+20
FOR loop%=1 TO LEN(port$)
char%=ASC(MID$(port$,loop%,1))
POKE port&+33+loop%,char%
NEXT loop%
CALL AddPort(port&)
result&=port&
END SUB
SUB RemovePort(port&) STATIC
byte&=PEEKW(port&-2)
sigBit%=PEEK(port&+15)
CALL RemPort(port&)
CALL FreeSignal(sigBit%)
CALL FreeMem(port&-2,byte&)
END SUB
The above collection of SUBroutines will allow to print to your current
window using all ANSI escape codes, and will also create a CLI type cursor
and control it for you. I will document the code for it is an extract
of the Abacus book "Amiga Tricks and Tips." (More on this at the end
of this tutorial.) You simply call the routine like this:
ConPrint "Hello, this is printing using ConPrint!!!"
Just do the following and the routine will create a console window
on it's own. If you wish to open the console first, just type:
SystemOn
And when you are finished and your program quits, type:
SystemOff
SystemOff is VERY important because it clears up allocated memory and
relases ports and signals allocated to create the console window. To use
ANSI, just include the control codes within the quotes in ConPrint or
use the pre-defined variables which should be placed at the beginning of
your program.
--------------------------------------------------------------------------
DISCLAIMER
--------------------------------------------------------------------------
The following file uses extractions from the following book(s):
Abacus' Amiga Tips And Tricks
References were tooken from the following book(s):
Advanced Amiga Basic by Compute Publications
AmigaBASIC Manual by Microsoft
I highly recommend Abacus' Amiga Tips And Tricks to ALL AmigaBASIC
programmers. It is an EXTREAMLY userfull refrence guide. I also
recommend Advanced Amiga Basic by Compute Publications, it to is
a great refrence manual. Both these publications should be on the
shelf of EVERY AmigaBASIC programmer.
if you find this tutorial handy, usefull, or even profit from it's
contents, please write to me:
Pierre Fortin
8035 Jeanne D'Arc Bd.
Orleans, Ontario, Canada
K1E 1B1
I can also be reached on:
OMX - Steve Tibbett's BBS(X)
613-731-3419
Compuerve
ID # 73667,3525
I will only continue this series of tutorials if there is demmand for it.
I am sorry for the spelling errors, but I don't own a spell checker!!!!
I would like to thank, Patrick Lalonde for help in writting some routines
and to Peter Kaminski for his help. I am currently writting a BBS in
AmigaBASIC and it is comming along quite well. Once completed I will
send copies of the demo out to those who write to me. The BBS will support
the following:
XMODEM, YMODEM, ZMODEM w/ 32bit-CRC (I already have the
routines!)
Complete message system
255 security level system
Voting
Configurable menus
more...
A demo version will be available to those interested in putting up the bbs.
Producing tutorial's of this type is hard work, to those who find this
tutorial useful, a small donation of about 5$ would be greatly appreciated.
Send donations to the above address. Those who send donations will
receive a copy of my BBS (when it's finished) and all the updates.